#include <iostream>
#include <thread>
#include <mutex>

void some_operation(const std::string &message) 
{
    static std::mutex mutex;
    {
        std::lock_guard<std::mutex> lock(mutex);

        // ...操作
        std::cout << message << std::endl;

        // 当离开这个作用域的时候，互斥锁会被析构，同时unlock互斥锁
        // 因此这个函数内部的可以认为是临界区
    }
}


int main()
{
    std::string msg = "hello world";
    std::thread t1(some_operation, msg);
    std::thread t2(some_operation, msg);
    t1.join();
    t2.join();
    // t.detach();
    return 0;
}